package xin.fsqr520.project.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.json.JSONObject;
import xin.fsqr520.project.domain.po.WsMessageType;
import xin.fsqr520.project.util.DateFormatUtils;

import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class WsResult {
    private WsMessageType type;   // 枚举类型
    private String sender;        // 发送者
    private String receiver;      // 接收者
    private String content;       // 消息文本
    private Object data;          // 附加数据，支持任意类型
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime sendTime; // 消息发送时间

    // 成功消息（带 content 和 data）
    public static WsResult success(WsMessageType type, String from, String to, String content, Object data) {
        return new WsResult(type, from, to, content, data, LocalDateTime.now());
    }

    // 成功消息（带 content，无 data）
    public static WsResult success(WsMessageType type, String from, String to, String content) {
        return new WsResult(type, from, to, content, null, LocalDateTime.now());
    }

    // 成功消息（只发通知，无 content 和 data）
    public static WsResult success(WsMessageType type, String from, String to) {
        return new WsResult(type, from, to, null, null, LocalDateTime.now());
    }

    // 错误消息
    public static WsResult error(WsMessageType type, String from, String to, String content) {
        return new WsResult(type, from, to, content, null, LocalDateTime.now());
    }

    // 转成 JSON 字符串
    public String toJson() {
        JSONObject json = new JSONObject();
        json.put("type", type.toString());
        json.put("sender", sender);
        json.put("receiver", receiver);
        json.put("content", content);
        json.put("data", data);
        json.put("sendTime", sendTime != null ? DateFormatUtils.format(sendTime) : null);
        return json.toString();
    }
}
